/*
 * Copyright (C) 2010 Fores Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jp.fores.midori.client.caller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * URLのリストを返すインターフェースの汎用実装クラス。<br>
 * <i>(Immutableクラス)</i><br>
 * (このクラスの全てのメソッドはスレッドセーフです。)<br>
 * <br>
 * コンストラクタで指定されたURLのリストを元にした、不変リストを返します。<br>
 */
public class GeneralURLListGetter implements URLListGetter {
	//==========================================================
	//フィールド

	/**
	 * URLのリスト
	 */
	protected final List<String> urlList;


	//==========================================================
	//メソッド

	//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
	//コンストラクタ

	/**
	 * 単一のURLを指定するタイプのコンストラクタです。<br>
	 *
	 * @param url URL
	 */
	public GeneralURLListGetter(String url) {
		//単一の要素のみを格納する不変リストを生成し、フィールドのURLのリストに設定
		this.urlList = Collections.singletonList(url);
	}

	/**
	 * URLのリストを指定するタイプのコンストラクタです。<br>
	 *
	 * @param urlList URLのリスト
	 */
	public GeneralURLListGetter(List<String> urlList) {
		//引数のURLのリストが変更されても影響がないようにするため、新たなArrayListのインスタンスを生成し、
		//さらにunmodifiableListでラッピングして不変リスト化してから、フィールドのURLのリストに設定
		this.urlList = Collections.unmodifiableList(new ArrayList<String>(urlList));
	}

	/**
	 * URLの配列を指定するタイプのコンストラクタです。<br>
	 *
	 * @param urlArray URLの配列
	 */
	public GeneralURLListGetter(String[] urlArray) {
		//配列をリストに変換して、リストを指定するタイプのコンストラクタを呼び出す
		this(Arrays.asList(urlArray));
	}


	//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
	//インターフェースの実装

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List<String> getURLList() throws Exception {
		//フィールドの値をそのまま返す
		return this.urlList;
	}
}
